package almacenes.controlador.gestionar;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.FacesException;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.primefaces.event.DateSelectEvent;

import almacenes.controlador.estado.Estado;
import almacenes.modelo.entidad.Agrupamiento;
import almacenes.modelo.entidad.Departamento;
import almacenes.modelo.entidad.Inspeccion;
import almacenes.modelo.entidad.InspeccionDetalle;
import almacenes.modelo.entidad.UsuarioMae;
import almacenes.modelo.excepcion.ExcepcionGeneral;

public class InspeccionMB extends GeneralMB{
	protected final Log logger = LogFactory.getLog(this.getClass());
	private List<Inspeccion> lstInspecciones;
	private List<InspeccionDetalle> lstInspeccionDetalle;
	private int idOperadorLog;
	private int idProveedorOperadorLogistico=-1;
	private int idEstadoGuia =-1;
	private int idDepartamento=-1;
	private int idCampania=-1;
	private int idPremio=-1;
	private int idFeria=-1;
	private int idGestorAlmacen=-1;
	private UsuarioMae objUsuario;
	private Inspeccion objInspeccion;
	private List<SelectItem> cboDepartamento;
	private List<SelectItem> cboCampania;
	private List<SelectItem> cboPremio;
	private List<SelectItem> cboFeria;
	private List<SelectItem> cboGestorAlmacen;
	private Date sFechaInicio;
	private Date sFechaFin;
	
	public int getIdDepartamento() {
		return idDepartamento;
	}

	public void setIdDepartamento(int idDepartamento) {
		this.idDepartamento = idDepartamento;
	}

	public InspeccionMB(){
		lstInspecciones= new ArrayList<Inspeccion>();
		listarInpecciones();
		cboDepartamento = new ArrayList<SelectItem>();
		cboCampania = new ArrayList<SelectItem>();
		cboPremio= new ArrayList<SelectItem>();
		cboFeria= new ArrayList<SelectItem>();
		cboGestorAlmacen = new ArrayList<SelectItem>();
		objInspeccion = new Inspeccion();
	}
	
	public String listarInspeccionesConFiltros(){
		listarInpecciones();
		return "test";
	}
	public String buscarInspeccion(){
		String sReturn ="test";
		
		    logger.debug("sFechaInicio "+sFechaInicio);
			logger.debug("sFechaFin "+sFechaFin);
			logger.debug("idProveedorOperadorLogistico "+idProveedorOperadorLogistico);
			logger.debug("idGestorAlmacen "+idGestorAlmacen);
			logger.debug("idEstadoGuia "+idEstadoGuia);
			
			objInspeccion.setFecReg(sFechaInicio);
			objInspeccion.setFecAct(sFechaFin); //Fecha Fin
			objInspeccion.setIdProveedor((long) idProveedorOperadorLogistico);
			objInspeccion.setIdDepartamento((short) idDepartamento);
			objInspeccion.setIdEstadoInspec((byte) idEstadoGuia);
			
			try {
				lstInspecciones = getInspeccionService().obtenerInspeccionesFiltro(objInspeccion);
			} catch (ExcepcionGeneral e) {
				e.printStackTrace();
			}
		return sReturn;
	}
	
	public String buscarDetalleInspeccion(){
		logger.debug("buscarDetalleInspeccion ***************************");
		String sReturn ="test";
		int iInspeccion=0;
		try {
			 iInspeccion = Integer.parseInt(capturarParametro("iInspeccion"));
			lstInspeccionDetalle=getInspeccionService().obtenerDetalleInspeccion(iInspeccion);
		} catch (ExcepcionGeneral e) {
			e.printStackTrace();
		}
		return sReturn;
	}
	
	
	public void listarInpecciones(){
		this.logger.debug("listarInpecciones");
		try {
			lstInspecciones = getInspeccionService().obtenerInspecciones();
		} catch (Exception ex) {
			this.logger.error(ex.getMessage(), ex);
			throw new FacesException(ex.getMessage(), ex);
		}
	}

	
    public void validarFechaMenor(DateSelectEvent event) throws ParseException{
		super.validarFechaMenor(event, sFechaFin);
    }
    public void validarFechaMayor(DateSelectEvent event) throws ParseException{
		super.validarFechaMayor(event, sFechaInicio);
    	
    }
    
	public void ListarDepartamentos(ValueChangeEvent e){
		this.logger.debug("ListarDepartamentos");
		this.idProveedorOperadorLogistico =  (Integer) e.getComponent().getAttributes().get("value");
		logger.debug("idProveedorOperadorLogistico "+idProveedorOperadorLogistico);
		 List<Departamento> lstDepartamento;
		 cboDepartamento=new ArrayList<SelectItem>();
		try {
			lstDepartamento = getInspeccionService().obtenerDepartamentos(idProveedorOperadorLogistico);
			
			System.out.println("lstDepartamento " +lstDepartamento.size());
			for (Departamento g : lstDepartamento) {
				
				cboDepartamento.add(new SelectItem(g.getIdDepartamento(), g.getDescDepartamento()));
			}
			this.ListarGestorAlmacen(e);
			
		} catch (Exception ex) {
			this.logger.error(ex.getMessage(), ex);
			throw new FacesException(ex.getMessage(), ex);
		}
	}
	
	public void ListarCampaniaXDepto(ValueChangeEvent e){
		this.logger.debug("getListarCampaniaXDepto");
		this.idDepartamento =  (Integer) e.getComponent().getAttributes().get("value");
	     logger.debug("idProveedorOperadorLogistico "+idProveedorOperadorLogistico + " idDepartamento "+idDepartamento);
		 List<Agrupamiento> lstCampania;
		 cboCampania=new ArrayList<SelectItem>();
		try {
			lstCampania = getInspeccionService().obtenerCampania(idProveedorOperadorLogistico, idDepartamento);
			
			System.out.println("lstCampania " +lstCampania.size());
			for (Agrupamiento g : lstCampania) {
				
				cboCampania.add(new SelectItem(g.getIdAgrupamiento(), g.getDescripcion()));
			}
			this.ListarFeria(e);
		} catch (Exception ex) {
			this.logger.error(ex.getMessage(), ex);
			throw new FacesException(ex.getMessage(), ex);
		}
	}


	
	public void ListarPremio(ValueChangeEvent e){
		this.logger.debug("getListarPremio");
		this.idCampania =  (Integer) e.getComponent().getAttributes().get("value");
		logger.debug("idProveedorOperadorLogistico "+idProveedorOperadorLogistico + " idDepartamento "+idDepartamento +" idCampania " +idCampania);
		 List<Agrupamiento> lstGeneral;
		 cboPremio=new ArrayList<SelectItem>();
		try {
			lstGeneral = getInspeccionService().obtenerPremio(idProveedorOperadorLogistico, idDepartamento, idCampania);
			
			System.out.println("lstGeneral " +lstGeneral.size());
			for (Agrupamiento g : lstGeneral) {
				
				cboPremio.add(new SelectItem(g.getIdAgrupamiento(), g.getDescripcion()));
			}
			
		} catch (Exception ex) {
			this.logger.error(ex.getMessage(), ex);
			throw new FacesException(ex.getMessage(), ex);
		}
	}
	
	public void ListarFeria(ValueChangeEvent e){
		this.logger.debug("getListarFeria");
		logger.debug("idProveedorOperadorLogistico "+idProveedorOperadorLogistico + " idDepartamento "+idDepartamento );
		 List<Agrupamiento> lstGeneral;
		 cboFeria=new ArrayList<SelectItem>();
		try {
			lstGeneral = getInspeccionService().obtenerFeria(idProveedorOperadorLogistico, idDepartamento);
			
			System.out.println("lstGeneral " +lstGeneral.size());
			for (Agrupamiento g : lstGeneral) {
				
				cboFeria.add(new SelectItem(g.getIdAgrupamiento(), g.getDescripcion()));
			}
			
		} catch (Exception ex) {
			this.logger.error(ex.getMessage(), ex);
			throw new FacesException(ex.getMessage(), ex);
		}
	}
	
	public void ListarGestorAlmacen(ValueChangeEvent e){
		this.logger.debug("ListarGestorAlmacen");
		logger.debug("idProveedorOperadorLogistico "+idProveedorOperadorLogistico + " idDepartamento "+idDepartamento +" idCampania " +idCampania);
		 List<UsuarioMae> lstGeneral;
		 cboGestorAlmacen=new ArrayList<SelectItem>();
		try {
			lstGeneral = getInspeccionService().obtenerGestoresAlmacen(idProveedorOperadorLogistico, objUsuario, idDepartamento);
			
			System.out.println("lstGeneral " +lstGeneral.size());
			for (UsuarioMae g : lstGeneral) {
				
				cboGestorAlmacen.add(new SelectItem(g.getIdUsuario(), g.getNombreUsuario()));
			}
			
		} catch (Exception ex) {
			this.logger.error(ex.getMessage(), ex);
			throw new FacesException(ex.getMessage(), ex);
		}
	}
	public void limpiarCriteriosBusquedaGenerar(){
		idDepartamento=0;
		idCampania=0;
		//idEstadoGuia=0;
		idFeria=0;
		idGestorAlmacen=0;
		idOperadorLog=0;
		idPremio=0;
		
	}
	public String generarInspeccion(){
		String sReturn ="test";
		objInspeccion=new Inspeccion();
		objInspeccion.setIdCampanha(this.idCampania);
		objInspeccion.setIdDepartamento((short) idDepartamento);
		objInspeccion.setIdPremio(idPremio);
		objInspeccion.setIdFeria(idFeria);
		objInspeccion.setIdUsuarioGestor(this.idGestorAlmacen);
		objInspeccion.setIdEstadoInspec((byte) Estado.EST_06_PENDIENTE);
		objInspeccion.setIdProveedor((long) idProveedorOperadorLogistico);
		objInspeccion.setCodInspeccionBbva("");
		objInspeccion.setUsuReg("SAMIRA");
		
		try {
			sReturn  = getInspeccionService().insertarInspeccion(objInspeccion);
		} catch (ExcepcionGeneral ex) {
			this.logger.error(ex.getMessage(), ex);
			throw new FacesException(ex.getMessage(), ex);
		}
		listarInpecciones();
		return sReturn;
	}


	public List<Inspeccion> getLstInspecciones() {
		return lstInspecciones;
	}

	public void setLstInspecciones(List<Inspeccion> lstInspecciones) {
		this.lstInspecciones = lstInspecciones;
	}



	public int getIdOperadorLog() {
		return idOperadorLog;
	}

	public void setIdOperadorLog(int idOperadorLog) {
		this.idOperadorLog = idOperadorLog;
	}

	public int getIdProveedorOperadorLogistico() {
		return idProveedorOperadorLogistico;
	}

	public void setIdProveedorOperadorLogistico(int idProveedorOperadorLogistico) {
		this.idProveedorOperadorLogistico = idProveedorOperadorLogistico;
	}

	public int getIdEstadoGuia() {
		return idEstadoGuia;
	}

	public void setIdEstadoGuia(int idEstadoGuia) {
		this.idEstadoGuia = idEstadoGuia;
	}

	public int getIdCampania() {
		return idCampania;
	}

	public void setIdCampania(int idCampania) {
		this.idCampania = idCampania;
	}

	public int getIdPremio() {
		return idPremio;
	}

	public void setIdPremio(int idPremio) {
		this.idPremio = idPremio;
	}

	public int getIdFeria() {
		return idFeria;
	}

	public void setIdFeria(int idFeria) {
		this.idFeria = idFeria;
	}

	public int getIdGestorAlmacen() {
		return idGestorAlmacen;
	}

	public void setIdGestorAlmacen(int idGestorAlmacen) {
		this.idGestorAlmacen = idGestorAlmacen;
	}

	public List<SelectItem> getCboDepartamento() {
		return cboDepartamento;
	}

	public void setCboDepartamento(List<SelectItem> cboDepartamento) {
		this.cboDepartamento = cboDepartamento;
	}

	public List<SelectItem> getCboCampania() {
		return cboCampania;
	}

	public void setCboCampania(List<SelectItem> cboCampania) {
		this.cboCampania = cboCampania;
	}

	public List<SelectItem> getCboPremio() {
		return cboPremio;
	}

	public void setCboPremio(List<SelectItem> cboPremio) {
		this.cboPremio = cboPremio;
	}

	public List<SelectItem> getCboFeria() {
		return cboFeria;
	}

	public void setCboFeria(List<SelectItem> cboFeria) {
		this.cboFeria = cboFeria;
	}

	public List<SelectItem> getCboGestorAlmacen() {
		return cboGestorAlmacen;
	}

	public void setCboGestorAlmacen(List<SelectItem> cboGestorAlmacen) {
		this.cboGestorAlmacen = cboGestorAlmacen;
	}

	public UsuarioMae getObjUsuario() {
		return objUsuario;
	}

	public void setObjUsuario(UsuarioMae objUsuario) {
		this.objUsuario = objUsuario;
	}

	public Inspeccion getObjInspeccion() {
		return objInspeccion;
	}

	public void setObjInspeccion(Inspeccion objInspeccion) {
		this.objInspeccion = objInspeccion;
	}

	public Date getsFechaInicio() {
		return sFechaInicio;
	}

	public void setsFechaInicio(Date sFechaInicio) {
		this.sFechaInicio = sFechaInicio;
	}

	public Date getsFechaFin() {
		return sFechaFin;
	}

	public void setsFechaFin(Date sFechaFin) {
		this.sFechaFin = sFechaFin;
	}

	public List<InspeccionDetalle> getLstInspeccionDetalle() {
		return lstInspeccionDetalle;
	}

	public void setLstInspeccionDetalle(List<InspeccionDetalle> lstInspeccionDetalle) {
		this.lstInspeccionDetalle = lstInspeccionDetalle;
	}






	
	
	
}
